/**
 * 时间格式化工具函数
 */

// 格式化时间显示（相对时间）
export const formatTime = (timeString) => {
  if (!timeString) return '未知时间';

  try {
    const date = new Date(timeString);

    // 检查日期是否有效
    if (isNaN(date.getTime())) {
      return '时间格式错误';
    }

    const now = new Date();
    const diffMs = now.getTime() - date.getTime();
    const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
    const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
    const diffMinutes = Math.floor(diffMs / (1000 * 60));

    // 相对时间显示
    if (diffMinutes < 60) {
      return diffMinutes <= 0 ? '刚刚' : `${diffMinutes}分钟前`;
    } else if (diffHours < 24) {
      return `${diffHours}小时前`;
    } else if (diffDays < 7) {
      return `${diffDays}天前`;
    } else if (diffDays < 30) {
      const weeks = Math.floor(diffDays / 7);
      return `${weeks}周前`;
    } else if (diffDays < 365) {
      const months = Math.floor(diffDays / 30);
      return `${months}个月前`;
    } else {
      const years = Math.floor(diffDays / 365);
      return `${years}年前`;
    }
  } catch (error) {
    console.warn('时间格式化失败:', timeString, error);
    return '时间解析失败';
  }
};

// 格式化完整日期时间（用于详情显示和Tooltip）
export const formatFullDateTime = (timeString) => {
  if (!timeString) return '未知时间';

  try {
    const date = new Date(timeString);

    if (isNaN(date.getTime())) {
      return '时间格式错误';
    }

    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');

    return `${year}年${month}月${day}日 ${hours}:${minutes}`;
  } catch (error) {
    console.warn('完整时间格式化失败:', timeString, error);
    return '时间解析失败';
  }
};

// 格式化简短日期（YYYY-MM-DD）
export const formatShortDate = (timeString) => {
  if (!timeString) return '未知日期';

  try {
    const date = new Date(timeString);

    if (isNaN(date.getTime())) {
      return '日期格式错误';
    }

    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');

    return `${year}-${month}-${day}`;
  } catch (error) {
    console.warn('短日期格式化失败:', timeString, error);
    return '日期解析失败';
  }
};

// 格式化中文日期（YYYY年MM月DD日）
export const formatChineseDate = (timeString) => {
  if (!timeString) return '未知日期';

  try {
    const date = new Date(timeString);

    if (isNaN(date.getTime())) {
      return '日期格式错误';
    }

    const year = date.getFullYear();
    const month = date.getMonth() + 1;
    const day = date.getDate();

    return `${year}年${month}月${day}日`;
  } catch (error) {
    console.warn('中文日期格式化失败:', timeString, error);
    return '日期解析失败';
  }
};

// 时间格式化选项
export const TIME_FORMAT_OPTIONS = {
  RELATIVE: 'relative', // 相对时间：3天前、1小时前
  FULL: 'full',         // 完整时间：2024年05月05日 09:17
  SHORT: 'short',       // 短日期：2024-05-05
  CHINESE: 'chinese'    // 中文日期：2024年5月5日
};

// 统一时间格式化函数
export const formatTimeByOption = (timeString, option = TIME_FORMAT_OPTIONS.RELATIVE) => {
  switch (option) {
    case TIME_FORMAT_OPTIONS.RELATIVE:
      return formatTime(timeString);
    case TIME_FORMAT_OPTIONS.FULL:
      return formatFullDateTime(timeString);
    case TIME_FORMAT_OPTIONS.SHORT:
      return formatShortDate(timeString);
    case TIME_FORMAT_OPTIONS.CHINESE:
      return formatChineseDate(timeString);
    default:
      return formatTime(timeString);
  }
};

export default {
  formatTime,
  formatFullDateTime,
  formatShortDate,
  formatChineseDate,
  formatTimeByOption,
  TIME_FORMAT_OPTIONS
}; 